/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Estructuras.Principales.CobranzaPrincipal;
import Herramientas.MailMotor;
import Reportes.Reportes;
import SistemaDTOS.UsersDTO;
import TarryDAOS.CarteraVencidaDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Alan Gonzalez
 */
@WebServlet(name = "Cobranza", urlPatterns = {"/Cobranza"})
public class Cobranza extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String action = request.getParameter("action");
            HttpSession session = request.getSession();

// TERMINAL TPV
            if (action.equals("principal")) {
                this.principal(request, response, session);

            } else if (action.equals("vencidos")) {
                this.vencidos(request, response, session);

            } else if (action.equals("generadorReportes")) {
                this.generadorReportes(request, response, session);

            } else if (action.equals("generadorReporteRequest")) {
                this.generadorReporteRequest(request, response, session);

            } else if (action.equals("reporteVencidos")) {
                this.reporteVencidos(request, response, session);

            } else {
                System.out.println("ERROR AL ENTRAR A UN SERVICIO");
            }

        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public void principal(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        CobranzaPrincipal principal = new CobranzaPrincipal();
        CarteraVencidaDAO carteraVencida = new CarteraVencidaDAO();
        principal.setTituloPagina("CREDITO Y COBRANZA");
        principal.setTituloLegenda("Creditos General");
        // muesreo y actualizacion de banderas
        carteraVencida.controladorBanderasCredito(1); // buscar activos y darles estado activo
        carteraVencida.controladorBanderasCredito(2); // buscart proximos a vencimiento  y darles estado de vencimiento proximo
        carteraVencida.controladorBanderasCredito(3); // buscar vencidos y darles la bandera de creditos vencidos
        carteraVencida.controladorBanderasCredito(4); // creditos otros
        principal.setCreditos(carteraVencida.todoCredito());
        session.setAttribute("principalCobranza", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/CobranzaJSP/main.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    /**
     * ALAN GONZALEZ | SERVICIO PARA MOSTRAR LOS CREDITOS VENCIDOS TODO EL
     * HISTORIAL
     *
     * @param request
     * @param response
     * @param session
     */
    public void vencidos(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        CobranzaPrincipal principal = new CobranzaPrincipal();
        CarteraVencidaDAO carteraVencida = new CarteraVencidaDAO();
        principal.setTituloPagina("CREDITO Y COBRANZA");
        principal.setTituloLegenda("Creditos Vencidos");
        // muesreo y actualizacion de banderas
        carteraVencida.controladorBanderasCredito(1); // buscar activos y darles estado activo
        carteraVencida.controladorBanderasCredito(2); // buscart proximos a vencimiento  y darles estado de vencimiento proximo
        carteraVencida.controladorBanderasCredito(3); // buscar vencidos y darles la bandera de creditos vencidos
        carteraVencida.controladorBanderasCredito(4); // creditos otros
        principal.setCreditos(carteraVencida.ventasCreditosVencidoEstado());
        session.setAttribute("principalCobranza", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/CobranzaJSP/main.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ MUESTRA LA INTERFAZ INICIAL DEL JSP DE SELECCION DE TIPO DE
     * REPORTE
     *
     * @param request
     * @param response
     * @param session
     */
    public void generadorReportes(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int bandera = 0;
        Vector errores = new Vector();
        session.setAttribute("banderaReportes", bandera);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ReportesInterfaz/main.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ MUESTRA LA INTERFAZ INICIAL DEL JSP DE SELECCION DE TIPO DE
     * REPORTE
     *
     * @param request
     * @param response
     * @param session
     */
    public void generadorReporteRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        MailMotor mailMotor = new MailMotor();
        CarteraVencidaDAO carteraVencidaDAO = new CarteraVencidaDAO();
        Reportes reportes = new Reportes();
        Vector vencidos = new Vector();
        int bandera = 0;
        Vector errores = new Vector();
        int tipoReporte = Integer.parseInt(request.getParameter("tipoReporte"));
        errores.clear();
        switch (tipoReporte) {
            case 0:
                bandera = 0;
                session.setAttribute("banderaReportes", bandera);
                errores.add("SELECCIONE UN TIPO DE REPORTE");
                session.setAttribute("errores", errores);
                session.setAttribute("nErrores", errores.size());
                RequestDispatcher onError = request.getRequestDispatcher("TarryJSP/ReportesInterfaz/main.jsp");
                try {
                    onError.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 1:
                UsersDTO userUp = (UsersDTO) session.getAttribute("userUpDTO");
                String mail = userUp.getEmail();
                bandera = 1;
                errores.clear();
                session.setAttribute("errores", errores);
                session.setAttribute("nErrores", errores.size());
                session.setAttribute("banderaReportes", bandera);
                session.setAttribute("userMail", mail);

                vencidos = carteraVencidaDAO.ventasCreditosVencidoEstado();
                String rutaReporte =  reportes.ReporteCarteraVencida(vencidos, 1, null);
                mailMotor.enviarMailAdjunto(mail, "Reporte Saldos", "En Adjunto su reporte", rutaReporte);

                RequestDispatcher a = request.getRequestDispatcher("TarryJSP/ReportesInterfaz/main.jsp");
                try {
                    a.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 2:
                bandera = 2;
                session.setAttribute("banderaReportes", bandera);
                errores.add("SELECCIONE UN TIPO DE REPORTE");
                RequestDispatcher b = request.getRequestDispatcher("TarryJSP/ReportesInterfaz/main.jsp");
                try {
                    b.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Cobranza.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 3:
                bandera = 1;
                break;
            case 4:
                bandera = 1;
                break;
        }

    }

    /**
     * ALAN GONZALEZ
     *
     * @param request
     * @param response
     * @param session
     */
    public void reporteVencidos(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int tipoReporte = Integer.parseInt(request.getParameter("tipoReporte"));
        Vector vencidos = new Vector();
        CarteraVencidaDAO carteraVencidaDAO = new CarteraVencidaDAO();
        Reportes reportes = new Reportes();
        // muesreo y actualizacion de banderas antes de realizar el reporte
        carteraVencidaDAO.controladorBanderasCredito(1); // buscar activos y darles estado activo
        carteraVencidaDAO.controladorBanderasCredito(2); // buscart proximos a vencimiento  y darles estado de vencimiento proximo
        carteraVencidaDAO.controladorBanderasCredito(3); // buscar vencidos y darles la bandera de creditos vencidos
        carteraVencidaDAO.controladorBanderasCredito(4); // creditos otros
        switch (tipoReporte) {
            case 1:
                vencidos = carteraVencidaDAO.ventasCreditosVencidoEstado();
                reportes.ReporteCarteraVencida(vencidos, 1, null);
                break;
            case 2:
                String fechaIncio = request.getParameter("fi");
                String fechaFin = request.getParameter("ff");
                vencidos = carteraVencidaDAO.creditosVencidosPeriodo(fechaIncio, fechaFin);
                String fechas = "DEL " + fechaIncio + " AL " + fechaFin;
                reportes.ReporteCarteraVencida(vencidos, 2, fechas);
                break;
        }
    }
}
